C指针原理(15)-C指针基础

简单C指针

指向整数的指针,以及指针的指针

[email protected]:~?%?vim?test1.c

#include?<stdio.h>

int?main(void){

????????int?x;

????????x=128;

????????int?*myp=&x;

????????int?**mypp=&myp;

????????printf("x:%d\n",x);

????????printf("myp:%u\n",myp);

????????printf("mypp:%u\n",mypp);

????????return?1;

}

上面程序定义了一个int型的整数,然后定义了2个指针,1个是myp,另1个是mypp。

myp和mypp都是指针变量,但指向的内容是不同的,myp指向x的地址,mypp指向myp的地址,通过myp可以找到x,而通过mypp则不能立即找到x,mypp先找到myp,然后再通过myp找到x,因此,mypp也称为指针的指针。

[email protected]:~?%?make

cc?test1.c?-o?mytest

[email protected]:~?%?./mytest

x:128

myp:4294957796

mypp:4294957784

[email protected]:~?%?

通过解引用操作符*提取指针指向的内容。

[email protected]:~?%?./mytest

x:128

myp:4294957796

mypp:4294957784

*myp:128

**mypp:128

代码为


#include?<stdio.h>

int?main(void){

????????int?x;

????????x=128;

????????int?*myp=&x;

????????int?**mypp=&myp;

????????printf("x:%d\n",x);

????????printf("myp:%u\n",myp);

????????printf("mypp:%u\n",mypp);

????????printf("*myp:%d\n",*myp);

????????printf("**mypp:%u\n",**mypp);

????????return?1;

}

*myp提取的是x的内容

而**mypp提取的是也是x的内容

那么*mypp提取的内容什么呢

是myp指针变量本身的内容,即x的地址。

可修改上述程序验证一下

#include?<stdio.h>

int?main(void){

????????int?x;

????????x=128;

????????int?*myp=&x;

????????int?**mypp=&myp;

????????printf("x:%d\n",x);

????????printf("myp:%u\n",myp);

????????printf("mypp:%u\n",mypp);

????????printf("*myp:%d\n",*myp);

????????printf("**mypp:%u\n",**mypp);

????????printf("*mypp:%u-myp%u\n",*mypp,myp);

????????return?1;

}

??????????????????????????????????????????????????

程序执行结果:看最后1行

[email protected]:~?%?./mytest

x:128

myp:4294957796

mypp:4294957784

*myp:128

**mypp:128

*mypp:4294957796-myp4294957796

[email protected]:~?%?

原文地址:http://blog.51cto.com/13959448/2325038

时间: 2024-11-12 20:19:44

C指针原理(15)-C指针基础的相关文章

C指针原理(16)-C指针基础

2.指向数组的指针 #include?<stdio.h> int?main(void){ ????????int?i; ????????char?x[20]="0123456789ABCDEFGHIJ"; ????????for?(i=0;i<20;i++){ ????????printf("x[%d]:%c\n",i,x[i]); ????????} ????????char?*p_x; ????????for?(p_x=&x[0];p_

C指针原理(17)-C指针基础

指针本身也是一种变量,支持常用的运算.比如加.减 #include?<stdio.h> int?main(void){ ????????int?i; ????????char?x[20]="0123456789ABCDEFGHIJ"; ????????for?(i=0;i<20;i++){ ????????printf("x[%d]:%c\n",i,x[i]); ????????} ????????char?*p_x; ????????for?(p

C指针原理(24)-C指针基础

取自netbsd中的源码,检查运算溢出,用C语言实现,方法很精妙 /* ? hide bintime for _STANDALONE because this header is used for hpcboot.exe,? which is built with compilers which don't recognize LL suffix.?* http://mail-index.NetBSD.org/tech-userlevel/2008/02/27/msg000181.html ?*

C指针原理(12)-C指针基础

tcctok.h定义了C语言的词法分析的基本元素,主要定义了关键字. / keywords /? ? ?DEF(TOK_INT, "int")? ? ?DEF(TOK_VOID, "void")? ? ?DEF(TOK_CHAR, "char")? ? ?DEF(TOK_IF, "if")? ? ?DEF(TOK_ELSE, "else")? ? ?DEF(TOK_WHILE, "while&qu

006 this指针原理

/* 目录: 一 this指针原理 */ 一 this指针原理 class CTest { public: CTest(int nNum) { this->nNum = nNum; } ~CTest() { } void Print() { cout << nNum << endl; } private: int nNum; }; int main(int argc, char *argv[], char **envp) { CTest c(0x11); c.Print();

常量指针、指针常量、常量指针常量

1 #include<stdio.h> 2 3 int main() 4 { 5 int a = 120; 6 int b = 60; 7 8 /* 9 * 常量指针, 不可以修改指向地址 10 * 的存储空间里的值,但可以修改指向地址的值 11 */ 12 int const *p1 = &a; 13 const int *p2 = &a; //常量指针 14 15 /* 16 * 指针常量,不可以修改指向的地址 17 * 但可以修改所指向地址存储空间里的内容 18 */ 1

智能指针原理与简单实现(转)

以下实现没有考虑线程安全的问题. 智能指针:它的一种通用实现方法是采用引用计数的方法.智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针. 每次创建类的新对象时,初始化指针并将引用计数置为1: 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数: 对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数:这是因此左侧的指针指向了右侧指针所指向的对象,因此右指针所

快慢指针原理--快速找到未知长度单链表的中间节点

package com.java.dataStruct; //节点类 public class Node<E> { E item; Node next; public Node(){ } public Node(E element){ this.item = element; } public Node(E element, Node next){ this.item = element; this.next = next; } } Node p1,r1; Node L1 = new Node

Objective-C中,ARC下的 strong和weak指针原理解释

Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量" 一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 注意:ARC 是编译器特性,而不是 iOS 运行时特性(除