指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针

指针与数组

指针与字符串

指针与函数??

指针与数组

1.数组名:数组元素首地址

eg:

int array[3]={1,3,6};

这里array 恒等于&array[0]

2.int *p = a;

int *p = 0;

int a[]={0};

3.int *p = a;

均指向数组的首地址

*p是? *(p+1)是?(*p)+1是?

*(p+1)决定向下移动几个字节是类型

4.指针可以当数组名使用

p[1] = 3;

恒等于a[1] ;恒等于*(p+1);恒等于*(a+1)

5.指针与数组的区别

1)所占空间不同

指针:只与操作系统位数有关

数组:与元素个数和类型有关

2)数组名是常量地址, 不能重指向(不能赋值)

指针可以重指向

用指针能否算出数组元素个数?

答: 字符串,字符数组 可以 以’\0’ 结束 ,其他类型不可以

通过指针计算字符串的长度

char string[10] = "iPhone";

char *p4 = string;

// *(p+1) = ‘v‘;  //操作单个字符

printf("%s" ,string);

printf(" %s",p4+1); //操作整个字符 打印 phone

int count = 0;

while ( *(p4 + count)!=‘\0‘) {

count++;

}

printf(" %d “,count);

int  countn =sizeof(string)/sizeif(char);

//如何全部输出字符串

char *strings[3] = { “iOS”,”Android”,”Win8”};

for(int i = 0; i < 3; i++)

{

printf(“%s”,strings[i]);

}

注意:可以用字符修改字符数组(可以调整位置等),但不可修改常量字符串

即iOS中单个的字符

指针与函数 与结构体

//使用指针查找学员数组中性别为男的学员,成绩增加10分,超过100分的记为100分

typedef struct{

char name[20];

char gender;

char namel[20];

float score;

} Student;

void manStudents(Student *mstu, int count);

void manStudents(Student *mstu, int count)

{

for (int i = 0; i < count; i++) {

if ((mstu+i)->gender == ‘m‘) {

((mstu+i)->score)=((mstu+i)->score)+10;

if (((mstu+i)->score) > 100) {

(mstu+i)->score = 100;

}

}

}

}

#define MUL(A,B)  ((A)*(B))

总结

1)指针变量是存放地址的变量,指针变量的赋值,意味着指针的重指向

2)数组名代表数组的首地址,而且是常量地址,不可以修改

3)函数调用时,形参拷贝了实参的值

时间: 2024-12-25 15:04:58

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏的相关文章

结构体中指针赋值问题的分析及C代码示例

问题描述 某结构体的定义如下: typedef struct { int iAge; // 年龄 char szAddr1[100]; // 地址1 char *pszAddr2; // 地址2 char **pszAddr3; // 地址3 } T_PeopleInfo; 请问如何对结构体中的各个成员变量(尤其是指针变量)进行赋值? 问题分析及C代码示例 我们可以看到,在结构体T_PeopleInfo中,pszAddr2和pszAddr3均为指针,其中pszAddr2为一级指针,pszAddr

黑马程序员 C语言-枚举,结构体,指针

一.枚举 ※枚举变量的定义 前面只是定义了枚举类型,接下来就可以利用定义好的枚举类型定义变量. 跟结构体一样,有3种方式定义枚举变量 1.先定义枚举类型,再定义枚举变量 enum Season {spring, summer, autumn, winter}; enum Season s; 2.定义枚举类型的同时定义枚举变量 enum Season {spring, summer, autumn, winter} s; 3.省略枚举名称,直接定义枚举变量 enum {spring, summer

深入了解Windows句柄到底是什么(句柄是逻辑指针,或者是指向结构体的指针,图文并茂,非常清楚)good

总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解.今天比较闲,我上网查了查,光是百度百科词条“句柄”中就有好几种说法,很多叙述还是错误的,天知道这些误人子弟的人是想干什么. 这里我列举词条中的关于句柄的叙述不当之处,至于如何不当先不管,继续往下看就会明白: 1.windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的

指向结构体的指针

运用指向结构体数组的指针输出学生信息 说明:指针指向结构体数组,就得到了该结构体数组的起始地址.通过该地址可以访问结构体数组中的所有成员变量.其中,指向结构体的指针的算术运算与 指向数组的指针的用法相似. #include<stdio.h> #define N 10 //结构体类型及变量的定义,初始化 struct student { char *number; char *name; char sex; int age; float score; }stu[3]={{"06001&

结构体与指针

若我们用[0x9999]来标记内存地址,则 *[0x9999]表示该地址内存中存储的数值 变量int a;a *[0x9999] 1&a [0x9999] 指针int* a;a *[0x8888] [0x9999]*a *(*[0x8888]) *[0x9999] 1&a [0x8888] 结构体变量struct mystruct{ int a; [0x9991] int b; [0x9992] int c; [0x9993]}s; s *[0x9991] 1&s [0x9991]

C#将结构体和指针互转的方法

1. 功能及位置 将数据从托管对象封送到非托管内存块,属于.NET Framework 类库 命名空间:System.Runtime.InteropServices 程序集:mscorlib(在 mscorlib.dll 中) 2. 语法 C#: [ComVisibleAttribute(true)] public static void StructureToPtr (Object structure,IntPtr ptr,bool fDeleteOld); C++: [ComVisibleA

EDKII CR宏:根据成员指针获取父结构体变量指针

核心提示: 1. CR宏 (Containing Record):根据成员指针获取父结构体变量指针 2. 0 指针的妙用. 在EDKII 的代码中有不少关于CR宏的使用,如 时钟中断处理函数CoreTimerTick. VOID EFIAPI CoreTimerTick ( IN UINT64 Duration ) { IEVENT *Event; ... if (!IsListEmpty (&mEfiTimerList)) { Event = CR (mEfiTimerList.Forward

C Language Study - 结构体成员指针初始化

结构体成员指针初始化 不可以正确运行的初始化方式(1): #include <stdio.h> #include <string.h> #include <malloc.h> //#include "a.h" //char a[100]; struct stu { char* name; int num; }*pst,st; void init_pst() { pst = (struct stu *)malloc(sizeof(struct stu)

结构体指针和结构体成员指针

在添加sqlite3的加解密功能函数时,由于网上资料针对的版本是旧版sqlite3源码,现在新版上做修改遇到了一个宏,该宏是旧版上的,它作用是由结构体成员指针pData找到它所属的结构体指针.下面转的文章详解了这种机制. 1.通过结构体成员指针寻找其所属结构体指针 转自http://blog.csdn.net/mycwq/article/details/9327743 宏CONTAINING_RECORD,可以直接根据结构体成员指针找到结构体指针. 我们看一下它的定义: 1 #define CO