Skip to content

Instantly share code, notes, and snippets.

@donly
Created November 18, 2016 01:34
Show Gist options
  • Save donly/a6c4d40b2ec8a2213cc08a459d377fc5 to your computer and use it in GitHub Desktop.
Save donly/a6c4d40b2ec8a2213cc08a459d377fc5 to your computer and use it in GitHub Desktop.
C language pointer usage demo
int main(int argc, const char * argv[]) {
/* 指针、引用和取值
int *ptr; // 声明一个 int 指针
int val = 1; // 声明一个 int 值
ptr = &val; // 为指针分配一个 int 值的引用
int deref = *ptr; // 对指针进行取值
int nullVal; // 默认值是 0
int *nullPtr = &nullVal;
printf("Hello, World!\n%p=%d\n%p=%d\n", ptr, deref, nullPtr, nullVal);
*/
/* void 指针,NULL 指针和未初始化指针
int *uninit; // int指针未初始化
int *nullptr = NULL; // 初始化为NULL
void *vptr; // void 指针未初始化
int val = 1024;
int *iptr;
int *castptr;
// void类型可以存储任意类型的指针或引用
iptr = &val;
vptr = iptr;
printf("iptr=%p, vptr=%p\n", iptr, vptr);
// 通过显示转换,我们可以把一个void指针转成
// int指针并进行取值
castptr = (int *)vptr;
printf("*castptr=%d\n", *castptr);
// 打印null和未初始化指针
printf("uninit=%p, nullptr=%p\n", uninit, nullptr);
// 不知道你会得到怎样的返回值,会是随机的垃圾地址吗?
// printf("*nullptr=%d\n", *uninit);
// 这里会产生一个段错误
// printf("*nullptr=%d\n", *nullptr);
*/
/* 指针和数组 */
int myArray[4] = {1, 2, 3, 0};
//int *ptr = myArray;
int *ptr;
ptr = &myArray[0];
//ptr = myArray;
printf("*ptr = %d\n", *ptr);
// 数组变量是常量,不能做下面的赋值
// myarray = ptr
// myarray = myarray2
// myarray = &myarray2[0]
/* 指针与结构体
struct person {
int age;
char *name;
};
struct person first;
struct person *ptr;
first.age = 21;
char *fullname = "GB";
first.name = fullname;
ptr = &first;
printf("age = %d, name = %s\n", first.age, ptr->name);
printf("age = %d, name = %s\n", first.age, (*ptr).name);
*/
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment